<?php
/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * Помощник вида, реализующий множественный выбор элементов субформ
 * 
 * @category Phorm
 * @package JQuery_View_Helper
 * @name /Phorm/JQuery/View/Helper/structuresResource.php
 * @copyright phorm.ru
 * @since 23.04.2012
 * @author vladimir@kachalov.net
 */

class Phorm_JQuery_View_Helper_StructuresResource extends ZendX_JQuery_View_Helper_UiWidget {
	
	/**
	 * Рисуем элемент
	 *
	 * @param string $id Id HTML-элемента
	 * @param string $value Значение элемента
	 * @param array $params Массив конфигурации из секции options
	 * @return string
	 */
    
	public function structuresResource($id, $value = null, array $params = array(), array $options = array()) {
		
		$translate = $params['translate'];
		
		/**
		 * Определяем id выбранной структуры на основе текущего значения
		 */
		
		$structureid = null; 
		if(is_array($value)) foreach ($value as $structureid=>$group) break;
		
		/**
		 * Определяем массив опций для селекта структур и формируем сам селект
		 * @todo Добавить свой отдельный prepareAttribs
		 */
		
		if(count($params['forms'])>1) {
			$attribs = array();
			foreach ($params as $k=>$v) if(is_string($v) && $k!='isexcluded') $attribs[$k] = $v;
			$select = $this->view->formSelect(null, $structureid, $attribs, $options);
		}
		
		/**
		 * Определяем форму с элементами каждой из структур
		 * Добавляем форму в JS
		 */
		
		$js_var = $id . '_subforms';
		if(isset($params['renderforms'])) {
			$this->jquery->addJavascript('var ' . $js_var . ' = ' . ZendX_JQuery::encodeJson($params['renderforms']) . ';');
		}
		
		/**
	     * Вешаем JS-обработку на смену структуры в селекте
	     */

	    $jquery_handler = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
	    
	    $js = sprintf('%s(document).on("change","#%s",function(){
		    	%s("#%s .zend_form").remove();
		    	%s(this).after(%s[%s(this).val()]);
				return false;
		    })',
		$jquery_handler, $id, $jquery_handler, $id . '-element', $jquery_handler, $js_var, $jquery_handler);
	    
	    $this->jquery->addOnLoad($js);
	    
	    /**
	     * Устанавливаем пришедшие значения
	     * Либо форму из первой структуры
	     */
	    
	    if(isset($params['forms'][$structureid])) {
	    	$xhtml = $params['forms'][$structureid]->render();
	    } else {
	    	foreach ($params['forms'] as $form) {
	    		$xhtml = $form->render();
	    		break;
	    	}
	    }
		
		return $select . $xhtml;
		
	}
	
}